import javax.mail.*; 
import javax.mail.internet.*; 
import javax.activation.*; 
import java.io.*; 
import java.util.Properties; 
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;


public class Reservierungswunsch {

	private Veranstaltung vfr;
	private ArrayList<Sitz> plaetze;
	private String name;
	private String mail;
	private Database db;
	
	
	public Reservierungswunsch(Database db, Veranstaltung vfr, ArrayList<Sitz> plaetze,String name, String mail) throws IOException, SQLException, AddressException, MessagingException {
		this.vfr=vfr;
		this.plaetze=plaetze;
		this.name=name;
		this.mail=mail;
		this.db=db;
		druck();
		new ReservierungsManager(db).reservierungsCheck(this);
	}
	
	public ArrayList<Sitz> getSitze (){
		return plaetze;
	}
	
	
	private void druck() throws IOException {
		FileWriter fw = new FileWriter(name + ".txt");
		PrintWriter pw = new PrintWriter(fw);
		
		pw.println("Reservierungswunsch");
		pw.println("");
		pw.println("");
		pw.println("Name: " + name);
		pw.println("Mail-Adresse: " + mail);
		pw.println("");
		pw.println("Fuer den Film: \t" + vfr.getFilm().getFilmtitel());
		pw.println(" Am " + vfr.getTermin() + " Uhr");
		pw.println("");
		pw.println("");
		pw.println("");
		pw.println("");
		pw.println("Wurden folgende Sitze ausgewaehlt:");
		double summe=0;
		for(int i=0;i<plaetze.size();i++){
			pw.println(plaetze.get(i).getName() + "     " + vfr.getFilm().getPreis(plaetze.get(i).getTyp()));
		    	summe=summe+vfr.getFilm().getPreis(plaetze.get(i).getTyp());
		}
		pw.println("");
		pw.println("\t Insgesamt wurden " + plaetze.size() + " Plaetze reserviert");
		pw.println(" Dies ergibt den Gesamtbetrag von " + summe + " Euro");
		pw.println("");
		pw.println("");
		pw.println("");
		pw.println("\t\t           **********Bitte auf Machbarkeit pruefen*********");
		
		pw.close();
		fw.close();
		
		System.out.println("Datei abgelegt");
		
	}
	
	 public void sendMail(String mailServer, String from, String to, 
             String subject, String[] attachments, int resnummer) throws 
MessagingException, AddressException
{ 
Authenticator auth = new SMTPAuthenticator();


// Setup mail server 
Properties props = System.getProperties();
props.put("mail.smtp.host", mailServer);
//  props.put("mail.smtp.port", "25");//"587");
//  props.put( "mail.smtp.auth ", "true");
//  props.put("mail.smtp.debug", "true");

// Get a mail session 
//Session session = Session.getDefaultInstance(props, auth);

  Session session = Session.getDefaultInstance(props, null); 

// Define a new mail message 
Message message = new MimeMessage(session); 
message.setFrom(new InternetAddress(from)); 
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
message.setSubject(subject); 

// Create a message part to represent the body text 
BodyPart messageBodyPart = new MimeBodyPart(); 


double summe=0;
String temp=null;
for(int i=0;i<plaetze.size();i++){
	temp = temp + (plaetze.get(i).getName() + "     " + vfr.getFilm().getPreis(plaetze.get(i).getTyp()) + "\n");
    	summe=summe+vfr.getFilm().getPreis(plaetze.get(i).getTyp());
}
/*messageBodyPart.setText("Reservierung \n"+"Reservierungsnummer: " + resnummer + "\n"+"\n"+"\n"
+"Name: " + name + "\n"+"Mail-Adresse: " + mail + "\n"+"\n"
+"Fuer den Film: \t" + vfr.getFilm().getFilmtitel() + "\n"+
" Am " + vfr.getTermin() + " Uhr" + "\n"+"\n" + "\n" + "\n" + "\n" + 
"Wurden folgende Sitze ausgewaehlt:" + "\n" + "\n" + temp + "\t Insgesamt wurden " + plaetze.size() + " Plaetze reserviert" + "\n" + 
" Dies ergibt den Gesamtbetrag von " + summe + " Euro" + "\n" + 
"\n" + "\n" + "\n" + "\t\t   **********Bitte holen Sie die Karten 30 Minuten vor Filmbegin ab*********");

*/
messageBodyPart.setText("Ihre Reservierung war erfolgreich");

Multipart multipart = new MimeMultipart(); 
multipart.addBodyPart(messageBodyPart); 
addAtachments(attachments, multipart); 
message.setContent(multipart); 
Transport.send(message); 


} 

protected void addAtachments(String[] attachments, Multipart multipart) 
     throws MessagingException, AddressException 
{ 
for(int i = 0; i<= attachments.length -1; i++) 
{ 
String filename = attachments[i];
MimeBodyPart attachmentBodyPart = new MimeBodyPart(); 
DataSource source = new FileDataSource(filename); 
attachmentBodyPart.setDataHandler(new DataHandler(source)); 
attachmentBodyPart.setFileName(filename); 
multipart.addBodyPart(attachmentBodyPart); 
} 
} 

	public void druck(int resnummer) throws IOException, AddressException, MessagingException, SQLException {
		FileWriter fw = new FileWriter(name + ".txt");
		PrintWriter pw = new PrintWriter(fw);
		
		pw.println("Reservierung");
		pw.println("Reservierungsnummer: " + resnummer);
		pw.println("");
		pw.println("");
		pw.println("Name: " + name);
		pw.println("Mail-Adresse: " + mail);
		pw.println("");
		pw.println("Fuer den Film: \t" + vfr.getFilm().getFilmtitel());
		pw.println(" Am " + vfr.getTermin() + " Uhr");
		pw.println("");
		pw.println("");
		pw.println("");
		pw.println("");
		pw.println("Wurden folgende Sitze ausgewaehlt:");
		double summe=0;
		for(int i=0;i<plaetze.size();i++){
			pw.println(plaetze.get(i).getName() + "     " + vfr.getFilm().getPreis(plaetze.get(i).getTyp()));
		    	summe=summe+vfr.getFilm().getPreis(plaetze.get(i).getTyp());
		}
		pw.println("");
		pw.println("\t Insgesamt wurden " + plaetze.size() + " Plaetze reserviert");
		pw.println(" Dies ergibt den Gesamtbetrag von " + summe + " Euro");
		pw.println("");
		pw.println("");
		pw.println("");
		pw.println("\t\t           **********Bitte holen Sie die Karten 30 Minuten vor Filmbegin ab*********");
		
		pw.close();
		fw.close();
		
		System.out.println("Datei abgelegt");
		
	//	ResultSet rs = db.getData("SELECT EMail FROM reservierungswunsch WHERE ReservierungswunschID = " + resnummer);
	//	rs.next();
	//	System.out.println("Mail: " + rs.getString(1));
		String server="localhost"; 
        String from="thm.fb.projekt@gmail.com"; 
            
            int i = mail.indexOf("@");
            int j = mail.indexOf(".", i);
            
            if (i == 0) 
            {
            	mail="takeaseat.kino@web.de";
            	System.out.println("Falsche Emailadresse");
            }
            
            if (j == -1 || j == (mail.length()-1))  
            {
                mail="takeaseat.kino@web.de";
                System.out.println("Falsche Emailadresse");
            }

        
        String to = mail;
        String subject="Test"; 
        //String message="Testing";
        String[] filenames = {name + ".txt"};
		sendMail(server, from, to, subject, filenames, resnummer);
		
	}

	public Veranstaltung getVeranstaltung (){
		return vfr;
	}
	
	public int anzahlDerPlaetze(){
		return plaetze.size();
	}
	
	public Sitz getPlatzNr(int index){
		return plaetze.get(index);
	}
	
	public String getMail(){
		return mail;
	}
	
	public String getName(){
		return name;
	}


	public int getAnzahlPlaetze() {
		return plaetze.size();
	}

}
